// 插件系统
// 允许用户注册自定义的文件系统实现：
package file

import (
	"sync"
)

// 文件系统注册表
var (
	fileSystems = make(map[string]FileSystem)
	fsMutex     sync.RWMutex
)

// RegisterFileSystem 注册自定义文件系统
func RegisterFileSystem(scheme string, fs FileSystem) {
	fsMutex.Lock()
	defer fsMutex.Unlock()
	fileSystems[scheme] = fs
}

// Open 支持多协议文件系统
func Open(uri string, mode string) (File, error) {
	// 解析URI中的协议
	scheme, path := parseURI(uri)

	fsMutex.RLock()
	fs, ok := fileSystems[scheme]
	fsMutex.RUnlock()

	if !ok {
		// 默认使用本地文件系统
		return localFileSystem{}.Open(path, mode)
	}

	return fs.Open(path, mode)
}
